/**
 * 
 */
package org.compiere.process;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.logging.Level;

import org.compiere.apps.ADialog;
import org.compiere.model.MBSCCard;
import org.compiere.model.MBSCCardLine;
import org.compiere.model.MBSCCardLineLink;
import org.compiere.model.MParameter;
import org.compiere.model.MParameterLine;
import org.compiere.util.Env;
import org.compiere.util.Msg;

/**
 * @author Y.Ibrayev
 *
 */
public class CalcCardLine extends SvrProcess {

	private int BSC_CardLine_ID = 0;
	
	/* (non-Javadoc)
	 * @see org.compiere.process.SvrProcess#prepare()
	 */
	@Override
	protected void prepare() {
		ProcessInfoParameter[] para = getParameter();
		for(int i=0; i < para.length; i++) {
			String name = para[i].getParameterName();
			if(para[i].getParameter() == null ) {
				;
			} else if(name.equals("BSC_CardLine_ID")) {
				BigDecimal tmp = (BigDecimal) para[i].getParameter();
				BSC_CardLine_ID = tmp.intValue() ;
			} else {
				log.log(Level.SEVERE,"CalcCardLine: Unknown parameter - "+name);
			}
		}
	}

	/* (non-Javadoc)
	 * @see org.compiere.process.SvrProcess#doIt()
	 */
	@Override
	protected String doIt() throws Exception {
		log.log(Level.INFO,"CalcCardLine: BSC_CardLine_ID - "+BSC_CardLine_ID);
		if (BSC_CardLine_ID > 0) {
			MBSCCardLine cardLine = new MBSCCardLine(Env.getCtx(),BSC_CardLine_ID,null);
			//-->add by Aslanbek
//			if(cardLine.getBSC_Parameter()!=null)
//			{
//				MBSCCard card = new MBSCCard(getCtx(), cardLine.getBSC_Card_ID(), get_TrxName());
//				MParameter parameter = new MParameter(Env.getCtx(),cardLine.getBSC_Parameter_ID(),get_TrxName());
//				
//				if(cardLine.getBSC_Card().getC_Period().getC_Year().getC_Calendar_ID()==1000003)
//				{
//					ArrayList<MParameterLine> parameterLines = parameter.getParameterLine();
//					double parameterLineValue = 0.0;
//					for(MParameterLine parameterLine : parameterLines)
//					{
//						if(parameterLine.getValueNumber()!=null)
//							parameterLineValue = parameterLineValue + Double.valueOf(parameterLine.getValueNumber());
//					}
//					cardLine.setValue(String.valueOf(parameterLineValue));
//				}
//				else if(cardLine.getBSC_Card().getC_Period().getC_Year().getC_Calendar_ID()==1000002)
//				{
//					MParameterLine parameterLine = parameter.getParameterLine(card.getPeriod());
//					
//					if(parameterLine!=null)
//					{
//						if(parameterLine.getValueNumber()!=null)
//							cardLine.setValue(parameterLine.getValueNumber());
//					}
//				}
//
//			}
			String value = "0";
			int diff = 0;
			for(MBSCCardLine line : cardLine.getLinkLines())
			{
				if(line.getValue()!=null)
				{
					value = String.valueOf(Integer.valueOf(value)+Integer.valueOf(line.getValue()));
					diff++;
				}
			}
			if(!value.equals("0")){
				value = String.valueOf(Integer.valueOf(value)/diff);
				cardLine.setValue(value);
			}
			//<--
			if (cardLine.save()) {
				BigDecimal result = cardLine.calculate();
				log.log(Level.INFO,"CalcCardLine: result - "+result.toString());
				cardLine.setValueNumber(result);
				cardLine.save();
			} else {
				ADialog.info(25, null, "Но могу посчитать линию карты ССП");
			}
		}
		return Msg.translate(Env.getCtx(), "Success");
	}

}
